package com.ichoice.rabbitmq.rpc.helper;


import com.ichoice.rabbitmq.rpc.helper.model.CallBackModel;
import com.ichoice.rabbitmq.rpc.helper.model.ProducerModel;


/**
 * @author xianrensawang
 * @since 2021/1/28
 */
public interface RpcRabbit {

    /**
     * 消息广播
     *
     * @param args 广播信息
     */
    void fanout(Object... args);

    /**
     * 消息发送
     *
     * @param producerModel rpc入参
     */
    void sent(ProducerModel producerModel);


    /**
     * 消息发送并接收回来的消息
     *
     * @param producerModel rpc入参
     * @param callback      回调方法
     */
    void sentAndBack(ProducerModel producerModel, ClientListenServerCallback callback);


    /**
     * 消息发送
     *
     * @param producerModel rpc入参
     * @return 回参
     */
    CallBackModel sentAndBack(ProducerModel producerModel);

    /**
     * 指定方法回调
     *
     * @param producerModel rpc入参
     * @param callback      回调类
     * @param method        指定回调方法
     */
    void sentBackByTargetMethod(ProducerModel producerModel, ClientListenServerCallback callback, String method);

}
